#include <iostream>
#include "DynamicArray.h"

int main()
{
    // DynamicArray a;
#if 0
    // 尾插
    for(int i = 0; i < 10; i++)
    {
        a.InsertTail(i + 1);
    }
    a.show();
#endif

#if 0
    // 头插
    for(int i = 0; i < 10; i++)
    {
        a.InsertHead(i + 1);
    }
    a.show();
#endif

#if 0
    a.InsertByIndex(1,99);
    a.show();
#endif

#if 0
    // 按位置删除
    a.RemoveByIndex(1);
    a.show();
#endif
    
#if 0
    // 按值删除
    a.RemoveByElement(1);
    a.show();
#endif

#if 0
    // 按位置查找
    ElementType *p = a.FindByIndex(1);
    if(p) // p不为空就表示找到了
    {
        std::cout<<*p<<std::endl;
    }
    else
    {
        std::cout<<"没找到！"<<std::endl;
    }
#endif

#if 0
    // 按值查找
    DynamicArray result = a.FindByElement(3);
    result.show();
#endif

#if 0
    // 按位置修改
    a.UpdateByIndex(0,100);
    a.show();
#endif

#if 0
    // 按值修改
    a.UpdateByElement(3,999);
    a.show();
#endif

#if 0
    // 排序
    a.Sort();
    a.show();
#endif

#if 0
    // 去重
    a.Duplicate();
    a.show();
#endif

#if 0
    DynamicArray a1;
    for(int i = 1; i < 10; i+=2)
    {
        a1.InsertTail(i);
    }
    DynamicArray a2;
    for(int i = 2;i <= 10; i+=2)
    {
        a2.InsertTail(i);
    }
    a1.show();
    a2.show();
    a1.Merge(a2).show();
#endif

#if 0
    // 找交并补集
    DynamicArray a1;
    DynamicArray a2;

    a1.InsertTail(1);
    a1.InsertTail(2);
    a1.InsertTail(2);
    a1.InsertTail(3);
    
    a2.InsertTail(2);
    a2.InsertTail(2);
    a2.InsertTail(3);
    a2.InsertTail(4);

    a1.FdInterSctn(a2).show();
    a1.FindUnionSet(a2).show();
    a1.FindDifference(a2).show();
#endif

#if 0
    // 判断两个数列是否相等
    DynamicArray a1;
    DynamicArray a2;

    a1.InsertTail(1);
    a1.InsertTail(2);
    a1.InsertTail(2);
    a1.InsertTail(3);
    
    a2.InsertTail(2);
    a2.InsertTail(2);
    a2.InsertTail(3);
    a2.InsertTail(1);

    std::cout<<(a1 == a2)<<std::endl;
#endif

#if 0
    // 二分查找
    DynamicArray a1;

    a1.InsertTail(1);
    a1.InsertTail(2);
    a1.InsertTail(3);

    size_t n = a1.BinarySearch(4);
    if(n == ULONG_MAX)
    {
        std::cout<<"没找到!"<<std::endl;
    }
    else
    {
        std::cout<<n<<std::endl;
    }
#endif

#if 0
    // 是否是子序列
    DynamicArray a1;
    DynamicArray a2;

    a1.InsertTail(1);
    a1.InsertTail(2);
    a1.InsertTail(3);
    a1.InsertTail(4);
    
    a2.InsertTail(2);
    a2.InsertTail(4);

    std::cout<<a1.IsChild(a2)<<std::endl;
#endif

#if 1
    // 获取子序列
    DynamicArray a1;

    a1.InsertTail(5);
    a1.InsertTail(6);
    a1.InsertTail(7);
    a1.InsertTail(8);

    a1.subsequence(1, 2).show();
#endif

    

    return 0;
}